package com.hbxs.folder.bean;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 自定义返回信息类
 */

@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("自定义返回信息类")
public class Result<T> {

    /**
     * 状态值
     */
    @ApiModelProperty(value="状态值，0表示成功，其他值表示各种异常")
    private Integer code;
    /**
     * 信息描述
     */
    @ApiModelProperty(value="信息描述")
    private String msg;
    /**
     * 返回的数据
     */
    @ApiModelProperty(value="返回的数据")
    private T res;

    /**
     * 返回类生成方法
     * @param code
     * @param msg
     * @param res
     * @return
     */
    public static Result generate(CodeList code, String msg, Object res){
        Result result = new Result(code.getCode(),msg,res);
        return result;
    }

    /**
     * 成功返回类生成方法
     * @param msg
     * @param res
     * @return
     */
    public static Result success(String msg, Object res){
        Result result = new Result(CodeList.SUCCESS.getCode(),msg,res);
        return result;
    }

    /**
     * 异常返回类生成方法
     * @param msg
     * @param res
     * @return
     */
    public static Result error(String msg, Object res){
        Result result = new Result(CodeList.ERROR.getCode(),msg,res);
        return result;
    }
    /**
     * 状态值编码
     */
    @ApiModel("状态值编码")
    public enum CodeList{

        //成功
        SUCCESS(0),
        //错误
        ERROR(100),
        //参数错误
        PARAMS_ERROR(400),
        //未授权
        UNAUTHORIZED(401),
        //无权限
        FORBIDDEN(403),
        //未找到
        NOT_FOUND(404),
        //文件格式错误
        FILE_FORMAT_ERROR(415),
        //非法请求
        ILLEGAL_REQUEST(417),
        //服务内部异常
        SERVER_ERROR(500),
        ;
        private int code;

        CodeList(int code) {
            this.code = code;
        }

        public int getCode() {
            return code;
        }
    }

}
